package com.huluobo.koltinim2003a.contract.register

import android.text.TextUtils
import com.huluobo.koltinim2003a.extention.isValidPassword
import com.huluobo.koltinim2003a.extention.isValidUserName
import com.hyphenate.chat.EMClient
import com.hyphenate.exceptions.HyphenateException
import org.jetbrains.anko.doAsync

/**
 * Created by lc on 2022/9/22.
 * 1.在公司中,整个账号的体系是需要放到公司自己的服务器和数据库中的
 * 2.公司的服务器需要和环信的服务器进行交互,也就是说,每当我向公司服务器注册一个账号时,服务器会向环信发起一个账号注册
 * 3.向Bmob后端云发起一个注册用户的请求
 * 4.在成功的方法中,再向环信发起一个注册请求(这一步,是模拟公司服务器的操作,正常来说,不会再android端进行)
 */
class RegisterPresenter(val view: RegisterContract.View) : RegisterContract.Presenter {
    override fun register(userName: String, password: String, confirmPassword: String) {
        if (userName.isValidUserName()) {
            if (password.isValidPassword()) {
                if (TextUtils.equals(password, confirmPassword)) {
                    view.onStartRegister()
                    registerEaseMob(userName, password)
                } else view.onConfirmPasswordError()
            } else view.onPasswordError()
        } else view.onUserNameError()
    }

    //模拟公司后台的操作流程,正常不需要在移动端去注册
    private fun registerEaseMob(userName: String, password: String) {
        doAsync {
            try {
                //如果没有捕获到异常,则代表注册成功
                EMClient.getInstance().createAccount(userName, password)
                runOnUIThread {
                    view.onRegisterSuccess()
                }
            } catch (e: HyphenateException) {
                //如果捕获到异常,则代表注册失败
                runOnUIThread {
                    if(e.errorCode ==203){
                        view.onUserExist()
                    }else{
                        view.onRegisterFailed("注册环信失败:${e.message},${e.errorCode}")
                    }
                }
            }
        }
    }
}